| VehDesc% - машина |
| Создает машину. |
|
;Пример использования функции ;pxCreateCar ;В данном примере нам понадобятся несколько однотипных тел Type Px_Cube Field body% Field mesh% End Type Graphics3D 800,600,32,2 SetBuffer BackBuffer() Global fntArial=LoadFont("Arial",16) ;Создаем свет light=CreateLight(1) PositionEntity light,0,50,20 ;Создаем камеру campiv=CreatePivot() cam=CreateCamera() PositionEntity cam,0,7,-15 ;Общий план plane=CreatePlane() tile1=LoadTexture("media\cell.bmp") ScaleTexture tile1,5,5 EntityTexture plane,tile1 ;Создаем физический мир, устанавливаем гравитацию. pxCreateWorld(1) ;У нас будет поверхность pxSetGravity(0,-30,0) ;для проверки подвески нам понадобятся горы level = LoadMesh("media\level.b3d") PositionMesh level, 0,2,0 CreateTrimeshMesh(level) tile2=LoadTexture("media\cell.bmp") ScaleTexture tile2,0.02,0.02 EntityTexture level,tile2 ;cube physic xcubic=PxCreateCube(1,1,1,100) pxSetPosition(xcubic,0,20,0) ;Создадим множество обектов помех For i=0 To 250 ocu.Px_Cube = New Px_Cube y# = Rnd (0.2,1) x# = Rnd (0.2,1) z# = Rnd (0.2,1) ocu\mesh=CreateCube () ScaleMesh ocu\mesh,x,y,z EntityColor ocu\mesh,Rand(0,255),Rand(0,255),Rand(0,255) ocu\body=PxCreateCube(x,y,z, 10) pxSetPosition(ocu\body,Rand(-40,40),40,Rand(-40,40)) Next ;Создаём описание машины car_desc = pxCarCreateDescriptor(0, 8, 0, 1200) pxCarSetMotorParameter(car_desc, 3500, 30) pxCarSetSteeringParameter(car_desc, 0.04, 30) pxCarSteerPoint(car_desc, 1.8, 0, 0, -1.5, 0,0) ;Создаём колёса front_koleso1 = pxCarAddDriveWheel(car_desc, 1.8, -0.4, 1.09, 0.4, 0.1) front_koleso2 = pxCarAddDriveWheel(car_desc, 1.8, -0.4, -1.09, 0.4, 0.1) back_koleso1 = pxCarAddWheel(car_desc, -1.5, -0.4, 1.09, 0.4, 0.1) back_koleso2 = pxCarAddWheel(car_desc, -1.5, -0.4, -1.09, 0.4, 0.1) pxCarSetWheelParameter(front_koleso1, 7000, 800, 0.2) pxCarSetWheelParameter(front_koleso2, 7000, 800, 0.2) pxCarSetWheelParameter(back_koleso1 , 7000, 800, 0.2) pxCarSetWheelParameter(back_koleso2, 7000, 800, 0.2) ;Создаём геометрию машины pxCarAddBoxShape(car_desc, 2.5,0.4, 1.2, 0, 0, 0) pxCarAddBoxShape(car_desc, 1,0.3, 1.1, -0.3, 0.7, 0) ; HullCube = CreateCube() ; PositionEntity HullCube,0,5,0 ; ScaleMesh HullCube,2.5, 0.4, 1.2 ; AddHullToCar(car_desc, HullCube, 0,0,0) ;Создаём машину car = pxCreateCar(car_desc) car_body = pxCarGetBody(car) pxSetCMassLocalPosition(car_body ,0, -0.5, 0) ;Создаём меш машимны car_mesh = LoadMesh("media\Audi.3ds") ScaleMesh car_mesh, 0.5,0.5,0.5 RotateMesh car_mesh, 0,-90,0 PositionMesh car_mesh,0,-0.9,0 Repeat PointEntity cam,car_mesh ; pxSetEntity(cubic,xcubic) pxSetEntity(car_mesh, car_body) ;car control speed =0 If KeyDown(200) speed=1 If KeyDown(208) speed=-1 angle=0 If KeyDown(203) angle=3 If KeyDown(205) angle=-3 brake=0 If KeyDown(57) brake = 1 ;physic RenderPhysic(60,0) For ocu.Px_Cube = Each Px_Cube pxSetEntity(ocu\mesh, ocu\body) Next pxCarControl(car, speed, angle, brake) UpdateWorld() RenderWorld() Text 5,25,"Управление - клавишы курсора и пробел" Flip Until KeyHit(1) End Function CreateTrimeshMesh(mesh%) nsurf = CountSurfaces(mesh) nvert = 0 nface=0 For ns = 1 To nsurf Local surf = GetSurface(mesh,ns) nface = nface+CountTriangles(surf) nvert = nvert +CountVertices(surf) Next fbank = CreateBank(nface*4*3) nf = 0 vbank = CreateBank(nvert*4*3) nv = 0 For ns = 1 To nsurf surf = GetSurface(mesh,ns) nfv = CountTriangles(surf) For nfc = 0 To nfv -1 PokeInt fbank,nf*12+0,TriangleVertex(surf,nfc,0) PokeInt fbank,nf*12+4,TriangleVertex(surf,nfc,1) PokeInt fbank,nf*12+8,TriangleVertex(surf,nfc,2) nf=nf+1 Next nvv = CountVertices(surf) For nvc = 0 To nvv - 1 PokeFloat vbank,nv*12+0,VertexX(surf,nvc) PokeFloat vbank,nv*12+4,VertexY(surf,nvc) PokeFloat vbank,nv*12+8,VertexZ(surf,nvc) nv = nv+1 Next Next bbb%=pxCreateStaticTriMesh(vbank, fbank, nvert, nface) FreeBank vbank FreeBank fbank Return bbb% End Function Function AddHullToCar%(VehDesc, mesh%, pos_x#, pos_y#, pos_z#) Local nsurf = CountSurfaces(mesh) Local nvert = 0 For ns = 1 To nsurf Local surf = GetSurface(mesh,ns) nvert = nvert + CountVertices(surf) Next vbSurface(mesh,ns) nvert = nvert + CountVertices(surf) Next vbSurface(mesh,ns) nvert v= 0 For ns = 1 To nsurf Local surf = GetSurface(mesh,ns) nvert = nvert + CountVertices(surf) Next sp; PokeFloat vbank,nv*12+4,Vertex; nvert = nvert + CountVertices(surf) Next vbSurface(mesh,ns) nvert v= 0 For ns = 1 To nsurf p; Next Next pxCarAddHullShape(VehDesc, vbank, nvert, pos_x, pos_y, pos_z) FreeBank vbank End Function |
К содержанию
Нажмите здесь чтобы увидеть последнюю версию этой странички в режиме online.